import jsonp from 'jsonp'
import { message } from 'antd'

import { ajaxTcbCloud as ajax } from './ajax'
import { ReqType as reqType, ReqWeatherUrlParts } from './config'
import { PAGE_SIZE } from '../config'
import { customLoginNew } from './customLogin'
import { customLogout } from './customLogout'

/**
 * 登录
 * 这里的箭头后面不要写“{}”，如果写了就要写“return”。
 */
export const reqLogin = async (username, password, flag = false) => {
  return await customLoginNew(username, password, flag)
}

/**
 * 退出登录
 */
export const reqLogout = () => customLogout()

/**
 * 添加/更新用户
 * user = {username, password, phone = '', email = '', role_id = ''}
 */
export const reqAddOrUpdateUser = (user) =>
  ajax(
    '/manage/user/' + (user._id ? 'update' : 'add'),
    { ...user },
    reqType.POST
  )

/**
 * 获取所有用户列表
 */
export const reqUsers = () => ajax('/manage/user/list')

/**
 * 删除用户
 */
export const reqUserDelete = (userId) =>
  ajax('/manage/user/delete', { userId }, reqType.POST)

/*
* jsonp请求的接口函数
* 不能使用ajax
* 需要使用jsonp请求，这个是为了适应百度天气的连接而使用的。
*
* - jsonp功能：
	- 1、用来解决ajax的跨域请求问题。只能使用“GET”请求。
	- 2、本质是一般的get请求，不是ajax请求。
	- 3、基本原理：
			- 浏览器端：
				动态生成script请求后台接口（src就是接口的url）。
				定义好用于接收响应数据的函数（fn），并且将函数名通过请求参数提交到服务端。
			- 服务器端：
				接收到请求处理产生结果数据后，返回一个函数调用的js代码，并且将结果数据作为实参传入函数调用。
			- 浏览器端：
				收到响应自动执行函数调用的js代码，也就执行了提前定义好的回调函数，并且得到需要的结果数据。
* */
export const reqWeather = (city) => {
  let tempCity = city || '北京'
  let url = ReqWeatherUrlParts[0] + tempCity + ReqWeatherUrlParts[1]

  return new Promise((resolve, reject) => {
    jsonp(url, {}, (err, data) => {
      // console.log('jsonp()', err, data);
      if (!err && data.status === 'success') {
        let { weather_data } = data.results[0]
        let { dayPictureUrl, weather } = weather_data[0]
        resolve({ dayPictureUrl, weather })
      } else {
        // console.log('失败了');s
        message.error('获取天气数据失败')
      }
    })
  })
}
/**
 * 获取所有一级二级的品类列表
 */
export const reqAllCategories = () =>
  ajax('/manage/category/list', { parentId: -1 })
/**
 * 获取一级（parentId===0）、二级(parentId!==0)分类列表
 * 这个parentId如果是'0'，必须变成数字0否则得不到数据。
 *
 * 已经移植到云函数
 */
export const reqCategorys = (parentId = '0') =>
  ajax('/manage/category/list', { parentId })
/**
 * 获取小程序中的导航栏的图片、名字等。
 *
 * 已经移植到云函数
 */
export const reqNavInfo = () => ajax('/manage/category/navInfo')
/**
 * 添加分类
 * @param categoryName
 * @param parentId
 */
export const reqAddCategory = (categoryName, parentId = 0) =>
  ajax(
    '/manage/category/add',
    {
      parentId,
      categoryName,
    },
    reqType.POST
  )
/**
 * 更新分类
 * @param categoryName
 * @param categoryId
 */
export const reqUpdateCategory = (categoryName, categoryId) =>
  ajax(
    '/manage/category/update',
    {
      categoryName,
      categoryId,
    },
    reqType.POST
  )
/**
 * 根据_id获取分类名称
 * @param categoryId
 */
export const reqCategory = (categoryId) =>
  ajax('/manage/category/info', { categoryId })
/**
 * 获取商品的分页列表
 *
 * 已经移植到云函数
 * @param pageNum 表示哪一页
 * @param pageSize 每一页显示的数据数量
 */
export const reqProducts = (pageNum = 1, pageSize = 1) =>
  ajax('/manage/product/list', {
    pageSize,
    pageNum,
  })
/**
 * 搜索商品分页列表
 *
 * 已经移植到云函数
 * @param pageNum 页码
 * @param pageSize 每页数据量
 * @param searchName 产品名/产品描述
 * @param searchType 这个的值是 productName/productDesc 。说明：让一个变量的值成为key，必须加上中括号。
 */
export const reqSearchProducts = ({
  pageNum,
  pageSize,
  searchName,
  searchType,
}) =>
  ajax('/manage/product/search', {
    pageNum,
    pageSize,
    searchName,
    searchType,
  })
/**
 * 对商品进行上架/下架处理
 *
 * 已经移植到云函数
 * @param productId
 * @param status
 */
export const reqUpdateStatus = (productId, status) =>
  ajax(
    '/manage/product/updateStatus',
    {
      productId,
      status,
    },
    reqType.POST
  )
/**
 * 删除商品
 *
 * 已经移植到云函数
 */
export const reqDeleteProduct = (_id) =>
  ajax('/manage/product/delete', { _id }, reqType.POST)
/**
 * 删除图片
 * 这个代码在file-upload.js中
 *
 * 已经移植到云函数
 */
export const reqImgDelete = (_id = '', name) =>
  ajax('/manage/img/delete', { _id, name })
/**
 * 实时匹配add-update中的标题输入框内容，找出相同的文章中的封面。
 */
export const reqFindSameTitle = (title) =>
  ajax('/manage/findSameTitle', { title })
/**
 * 添加/修改商品
 * @param product
 */
export const reqAddOrUpdateProduct = (product) =>
  ajax(
    '/manage/product/' + (product._id ? 'update' : 'add'),
    { product },
    reqType.POST
  )
/**
 * 获取角色列表
 */
export const reqRoles = () => ajax('/manage/role/list')
/**
 * 添加角色
 * @param roleName
 */
export const reqAddRoles = (roleName) =>
  ajax('/manage/role/add', { roleName }, reqType.POST)
/**
 * 更新角色(给角色设置权限)
 * @param _id
 * @param menus
 * @param auth_name
 */
// export const reqUpdateRole = (_id, menus, auth_name) => ajax('/manage/role/update', {
//     _id,
//     menus,
//     auth_name
// }, reqType.POST);
export const reqUpdateRole = (role) =>
  ajax('/manage/role/update', role, reqType.POST)
/**
 * 获取、添加或者更新。
 * “走进永昌”、“精选案例”、“装修咨询”和“会员中心”。
 * 这些二级详情界面的 detail_two 的标题的图片。
 *
 * 已经移植到云函数
 */
export const reqImagesOfTitles = () => ajax('/go/imagesOfTitles')
/**
 * 更新。
 * “走进永昌”、“精选案例”、“装修咨询”和“会员中心”。
 * 这些二级详情界面的 detail_two 的标题的图片。
 *
 * 已经移植到云函数
 */
export const reqUpdateImagesOfTitles = (data) =>
  ajax('/go/updateImagesOfTitles', data, reqType.POST)
/**
 * 获取留言板信息
 *
 * 已经移植到云函数
 */
export const reqGetMessageBoard = (page = 1, size = PAGE_SIZE) =>
  ajax('/go/getMessageBoard', { page, size })
/**
 * 搜索留言板分页列表
 *
 * 已经移植到云函数
 * @param page
 * @param size
 * @param searchType
 * @param searchKeyWord
 */
export const reqSearchMessageBoard = ({
  page,
  size,
  searchType,
  searchKeyWord,
  status,
}) =>
  ajax('/go/getMessageBoard', {
    page,
    size,
    [searchType]: searchKeyWord,
    status,
  })
/**
 * 更新留言板的状态
 *
 * 已经移植到云函数
 * @param data
 */
export const reqUpdateMessageBoardStatus = (data) =>
  ajax('/go/updateMessageBoardStatus', data, reqType.POST)
/**
 * 获取留言板中客服没有读取的信息的数量。
 */
export const reqGetMessageBoardUnreadCount = () =>
  ajax('/go/getMessageBoardUnreadCount')
/**
 * 咨询的初始化信息
 *
 * 已经移植到云函数
 */
export const reqGetAskIndex = () => ajax('/ask/index')
/**
 * 更新咨询的信息
 */
export const reqUpdateAskIndex = (data) =>
  ajax('/ask/index', { data }, reqType.PUT)
/**
 * 获取装修咨询提交的所有留言。
 *
 * 已经移植到云函数
 */
export const reqAskListMessages = (page = 1, size = PAGE_SIZE) =>
  ajax('/ask/messages', { page, size })
/**
 * 获取装修种类的名字
 *
 * 已经移植到云函数
 */
export const reqAskTypes = () => ajax('/ask/types')
/**
 * 搜索装修咨询分页列表
 *
 * 已经移植到云函数
 * @param page
 * @param size
 * @param searchType
 * @param searchKeyWord
 */
export const reqSearchAskListMessages = ({
  page,
  size,
  searchType,
  searchKeyWord,
  status,
  type,
}) =>
  ajax('/ask/getMessageBoard', {
    page,
    size,
    [searchType]: searchKeyWord,
    status,
    type,
  })
/**
 * 更新装修咨询的状态
 * @param data
 */
export const reqUpdateAskMessageStatus = (_id, status) =>
  ajax('/ask/updateStatus', { _id, status }, reqType.PUT)
/**
 * 获取装修咨询中客服没有读取的信息的数量。
 */
export const reqGetAskUnreadCount = () => ajax('/ask/getAskUnreadCount')
